<?php
namespace Admin\Controller;
use Think\Controller;
use Org\Util\Rbac;
/**
 * 公共模块
 */
class PublicController extends CommonController {
	/**
	 * 首页
	 * @internal 此方法会跳转到分组首页
	 * @access public
	 * @since 2014-10-10 14:53:37
	 * @author FrankKung <kongfanjian@andlisoft.com>
	 */
	public function index() {
		redirect(__MODULE__);
	}

	/**
	 * 用户登录
	 * @internal 此方法显示用户登录页面
	 * @access public
	 * @since 2014-10-11 11:48:17
	 * @author FrankKung <kongfanjian@andlisoft.com>
	 */
	public function login() {
		if(!isset($_SESSION[C('USER_AUTH_KEY')])) {
			$this->display();
		} else {
			$this->redirect('Index/index');
		}
	}

	/**
	 * 用户登出
	 * @internal 此方法完成登出操作并跳转到用户登录页面
	 * @access public
	 * @since 2014-10-11 12:09:17
	 * @author FrankKung <kongfanjian@andlisoft.com>
	 */
	public function logout() {
		if(isset($_SESSION[C('USER_AUTH_KEY')])) {
			unset($_SESSION[C('USER_AUTH_KEY')]);
			unset($_SESSION);
			session_destroy();
			$this->success('登出成功！',__CONTROLLER__.'/login/');
		} else {
			$this->error('已经登出！');
		}
	}

	/**
	 * 验证码
	 * @internal 此方法用于生成验证码图片
	 * @access public
	 * @since 2014-10-11 12:09:17
	 * @author FrankKung <kongfanjian@andlisoft.com>
	 */
	public function verify() {
		$Verify = new \Think\Verify();
		// 设置验证码字符为纯数字
		$Verify->codeSet = '0123456789';
		$Verify->length   = 4;
		$Verify->entry();
	}

	/**
	 * 登陆检测
	 * @internal 此方法会对登陆信息进行检测和完成登陆状态设置
	 * @access public
	 * @param string $account 账号
	 * @param string $password 密码
	 * @param string $verify 验证码
	 * @since 2014-10-10 14:59:32
	 * @author FrankKung <kongfanjian@andlisoft.com>
	 */
	public function checkLogin() {
		// 参数
		$account	= I("post.account");
		$password	= I("post.password");
		$verify		= I("post.verify");

		// 模型
		$User = D("User");
		$RoleUser = D("RoleUser");

		// 参数检测
		if (empty($account)) {
			$this->error('账号错误！');
		} elseif (empty($password)) {
			$this->error('密码必须！');
		} elseif (empty($verify)) {
			$this->error('验证码必须！');
		}

		// 校验验证码
		if (!$this->check_verify($verify)) {
			$this->error('验证码输入错误！');
		}

		// 构建认证条件
		$map['account']	= $account;
		$map['status']	= array('gt', 0);

		// 获取账号信息
		$authInfo = RBAC::authenticate($map);
		$roleInfo = $RoleUser->where(array('user_id'=>$authInfo['id']))->find();
		$status = $User->where(array('account'=>$account))->getField('status');
		if ($status == 0) $this->error('账号已被禁用');

		// 账户认证
		if (false === $authInfo) {
			$this->error('帐号不存在或已禁用！');
		} else {
			if ($authInfo['password'] != md5($password)) $this->error('密码错误！');
			session(C('USER_AUTH_KEY'), $authInfo['id']);
			session('account', $authInfo['account']);
			session('email', $authInfo['email']);
			session('nickname', $authInfo['nickname']);
			session('lastLoginTime', $authInfo['last_login_time']);
			session('loginCount', $authInfo['login_count']);
			// 管理员 和 领导组 认证标识
			if($authInfo['account'] == 'admin' or $roleInfo['role_id'] == C('LEADER')) session('administrator', true); // 领导组ID在配置文件中设置LEADER参数

			// 账号登陆信息更新
			$userMap['id'] = $authInfo['id'];
			$data['last_login_time']	= time();
			$data['login_count']		= array('exp', 'login_count+1');
			$data['last_login_ip']		= get_client_ip();
			$User->where($userMap)->save($data);

			// 缓存访问权限
			RBAC::saveAccessList();
			redirect(__MODULE__.'/Index/index');
		}
	}



}